<?php
declare (strict_types = 1);

namespace app\adminapi\controller;

use app\adminapi\business\TypeBusiness;
use think\Exception;
use think\Request;

class Type
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        try {

            // 查询列表
            $limit = \request()->get('limit',10);
            $page = \request()->get('page',1);
            # 验证参数
            if (!is_numeric($limit) || !is_numeric($page)) {
                throw new Exception("参数不正确");
            }

            $data = \app\common\model\Type::paginate($limit);

            return  success($data);
        }catch (\Exception $exception) {
            return  error($exception->getCode(),$exception->getMessage());
        }
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        //
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        try {
            # 控制器调佣业务逻辑层
            $param  = $request->all();
            # 参数验证。。。
            # 调用公共过滤方法进行过滤、针对于规格信息进行过滤
            $param['spec'] = array_filters($param['spec']);//array_filters自定义的数据过滤方法
            // 针对属性信息过滤
            $param['attr'] = array_filters($param['attr']);

            TypeBusiness::save($param);
        }catch (\Exception $exception) {
            return  error($exception->getCode(),$exception->getMessage());
        }
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        try {
            # 验证参数
            if (!is_numeric($id)) {
                throw new Exception("参数不正确");
            }
            # 查询对应的规格以及规格值
            # 查询对应的属性

            $info = \app\common\model\Type::with(['attr','spec','spec.specValue'])
                ->visible([
                'attr'=> [
                    'id','sort','attr_values','attr_name'
                    ],
                    'spec' =>[
                        'id','sort','spec_name'
                    ],
                    'specValue' => [
                        'id','spec_value'
                    ]
                ])->find($id);
            return  success($info);
        }catch (\Exception $exception) {
            return  error($exception->getCode(),$exception->getMessage());
        }
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        try {
//            接收参数
            $param = $request->all();

//            2. 检测数据
            # 调用公共过滤方法进行过滤、针对于规格信息进行过滤
            $param['spec'] = array_filters($param['spec']);//array_filters自定义的数据过滤方法
            // 针对属性信息过滤
            $param['attr'] = array_filters($param['attr']);

            TypeBusiness::update($id,$param);
            return  success();
        }catch (\Exception $exception) {
            return  error($exception->getMessage(),$exception->getCode());
        }
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        try {
            if (!is_numeric($id)) {
                throw new Exception("删除的参数不正确");
            }

            # 判断该类型是否有商品、有商品、不能删除
            $is_goods = \app\common\model\Goods::where('type_id',$id)->find();
            if (!empty($is_goods)) {
                throw new Exception("该类型下有商品、不能删除");
            }
            TypeBusiness::delete($id);
            return  success();
        }catch (\Exception $exception) {
            return  error($exception->getMessage(),$exception->getCode());
        }
    }
}
